////////////////////////////////////////////////////////////////////
///
///   StringUtils.h
///
///   Copyright (C) 2007 ScalingWeb.com
///   All rights reserved. 
/// 
///   Authors: Yuriy Soroka <ysoroka@scalingweb.com>
///	       Anton Fedoruk <afedoruk@scalingweb.com>
///
/// 
///////////////////////////////////////////////////////////////////


#include "StringUtils.h"

#include <ctype.h>

//	============================================================
//	StringTokenizer::StringTokenizer

StringTokenizer::StringTokenizer( const std::string &strToken, const std::string &strDelimiter )
{
	mFirst = true;

	mcstr = new char[ strToken.length() + 1 ];
	strcpy( mcstr, strToken.c_str() );

	mdelim = new char[ strDelimiter.length() + 1 ];
	strcpy( mdelim, strDelimiter.c_str() );
}

//	============================================================
//	StringTokenizer::StringTokenizer

StringTokenizer::StringTokenizer( const char *strToken, const char *strDelimiter )
{
	mFirst = true;

	mcstr = new char[ strlen( strToken ) + 1 ];
	strcpy( mcstr, strToken );

	mdelim = new char[ strlen( strDelimiter ) + 1 ];
	strcpy( mdelim, strDelimiter );
}

//	============================================================
//	StringTokenizer::~StringTokenizer

StringTokenizer::~StringTokenizer()
{
	delete [] mcstr;
	delete [] mdelim;
}

//	============================================================
//	StringTokenizer::nextToken
/// 
/// @param  strText -- string object where returned next token
/// @return true if success or false if no more tokens

bool StringTokenizer::nextToken( std::string &strText )
{
	char *token = 0;

	if ( mFirst )
	{
		token = strtok( mcstr, mdelim );
		mFirst = false;
	}
	else 
	{
		token = strtok( 0, mdelim );
	}

	if ( token == 0 )
	{
		return false;
	}
	
	strText.assign( token );

	return true;
}

//	============================================================
//	StringTokenizer::nextToken

bool StringTokenizer::nextToken( QByteArray &strText )
{
	char *token = 0;

	if ( mFirst )
	{
		token = strtok( mcstr, mdelim );
		mFirst = false;
	}
	else 
	{
		token = strtok( 0, mdelim );
	}

	if ( token == 0 )
	{
		return false;
	}
	
	strText = token;

	return true;
}

//	============================================================
//	StringTokenizer::nextToken

bool StringTokenizer::nextToken( JBufferString &strText )
{
	char *token = 0;

	if ( mFirst )
	{
		token = strtok( mcstr, mdelim );
		mFirst = false;
	}
	else 
	{
		token = strtok( 0, mdelim );
	}

	if ( token == 0 )
	{
		return false;
	}
	
	strText.assign( token, strlen( token ) );

	return true;
}

